
   /**
    * \file     windowing.c
    * \author   François Grondin <francois.grondin2@usherbrooke.ca>
    * \version  2.0
    * \date     2018-03-18
    * \copyright
    *
    * Permission is hereby granted, free of charge, to any person obtaining
    * a copy of this software and associated documentation files (the
    * "Software"), to deal in the Software without restriction, including
    * without limitation the rights to use, copy, modify, merge, publish,
    * distribute, sublicense, and/or sell copies of the Software, and to
    * permit persons to whom the Software is furnished to do so, subject to
    * the following conditions:
    *
    * The above copyright notice and this permission notice shall be
    * included in all copies or substantial portions of the Software.
    *
    * THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
    * EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
    * MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
    * NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
    * LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
    * OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
    * WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
    *
    */

    #include <init/windowing.h>

    window_obj * windowing_hann(const unsigned int frameSize) {

        window_obj * obj;
        unsigned int iSample;

        obj = window_construct_zero(frameSize);

        if ( frameSize == 1 ) {

        	obj->array[0] = 1.0f;

        }
        else {

            for ( iSample = 0; iSample < frameSize; iSample++ ) {
                
                obj->array[iSample] = 0.5f * ( 1.0f - cosf( 2 * M_PI * ( (float) iSample ) / ( (float) ( frameSize - 1 ) ) ) );
                                
            }


        }

        return obj;

    }

    window_obj * windowing_roothann(const unsigned int frameSize) {

        window_obj * obj;
        unsigned int iSample;

        obj = window_construct_zero(frameSize);

        if ( frameSize == 1 ) {

            obj->array[0] = 1.0f;

        }
        else {

            for ( iSample = 0; iSample < frameSize; iSample++ ) {

                obj->array[iSample] = sqrtf( 0.5f * ( 1.0f - cosf( 2 * M_PI * ( (float) iSample ) / ( (float) ( frameSize - 1 ) ) ) ) );

            }

        }

        return obj;

    }
